package org.hbgl.geoentity.core.util;

import org.apache.commons.codec.binary.Base64;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 代码功能：图片与Base64相互转换
 * 开发日期：2016/9/13
 * 作者：蒋海仑
 * 联系方式：
 * 版本更迭说明：
 * 版权信息：河北广联信息技术有限公司
 */
public class Base64AndImage {

    /**
     * 将文件转为Base64
     *
     * @param fileName 文件名
     * @return
     */
    public static String encryptToBase64(String fileName) {
        try {
            byte[] data;
            InputStream is = Base64AndImage.class.getClassLoader().getResourceAsStream(fileName);
            data = new byte[is.available()];
            is.read(data);
            is.close();
            return new String(Base64.encodeBase64(data)).replaceAll("\r|\n", "");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String imageToBase64String(BufferedImage image) {
        byte[] data = null;
        //读取图片字节数组
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        try {
            ImageIO.write(image, "gif", stream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        data = stream.toByteArray();
        //对字节数组Base64编码
        return new String(Base64.encodeBase64(data)).replaceAll("\r|\n", "");//返回Base64编码过的字节数组字符串
    }

    /**
     * 用途：base64直接转为Bytes，不保存为文件
     * 参数：base64字符串
     * 作者：刘亚旭
     * 时间：2017/1/4-9:09
     */
    public static byte[] base64ToBytes(String base64String) {
        //Base64解码
        base64String = base64String.replace(" ", "+");
        byte[] b = Base64.decodeBase64(base64String);
        for (int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {//调整异常数据
                b[i] += 256;
            }
        }
        return b;
    }

}
